/*
 * cam.h
 *
 *  Created on: 2020-10-8
 *      Author: h3
 */

#ifndef CAM_H_
#define CAM_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>	//v4l2对于的头文件

typedef struct {
    void *start;            //缓冲区起始地址
    unsigned int length;    //缓冲区长度
} cam_buffer_t;             //缓冲区类型

typedef struct {
/* 数据 */
	char *dev_name;
	int fd;

    int v4l2_pixfmt;	//像素格式
    int width;			//宽
    int height;			//高
    int bytesperline;	//每一行像素的字节数

    int fps;

    int nr_buffers;         //缓冲区个数
	cam_buffer_t *buffers;  //用户空间的数据缓冲区
	int cur_buffer_index;	//当前正在使用的缓冲区

/* 方法 */
	int (*open)(char *filename);
	int (*close)(void);
	int (*query_capability)(void);
	int (*enum_std)(void);
	int (*enum_format)(void);
	int (*get_cur_format)(void);
	int (*set_format)(__u32 pixfmt, int w, int h);
	int (*get_parm)(void);
	int (*set_parm)(int fps);
	int (*req_bufs)(int count);
	int (*mmap)(void);
	int (*munmap)(void);
	int (*start)(void);
	int (*stop)(void);
	int (*get_frame)(unsigned char **frame);
	int (*free_frame)(void);
	int (*init)(char *filename,__u32 pixfmt,int w,int h,int fps,int bufcount);
	int (*release)(void);
} cam_t;

extern cam_t cam_obj;	//模块对象的声明

#endif /* CAM_H_ */
